package com.gyy.flutter.plugin.flutter_plugin_print_a300.newprint.base;


public abstract class PcPointPrint implements IPrint {


    @Override
    public void printPcLine(int x, int y, String direction, double length) {
        if(PrintKey.DIRECTION_HORIZONTAL.equals(direction)) {
            printLine(x,y,x+length,y,2);
        } else {
            printLine(x,y,x,y+length,2);
        }
    }

    @Override
    public void printPcRectangle(int x, int y, double width, double height) {
        printLine( x, y,x+width, y,2);
        printLine( x, y, x,y+height,2);
        printLine(x+width,y,x+width,y+height,2);
        printLine( x,y+height,x+width,y+height,2);
    }

    @Override
    public void printPcText(int startX, int startY, String text, double textSize, int angle, boolean isBold,double width,double height,boolean reverse, String mag) {
        //如果有宽高时候的打印
//        if(width != 0 || height != 0) {
//            //当前行数
//            int countRow = 1;
//            //当前高度
//            int countHeight = 0;
//            //起始位置
//            int startIndex = 0;
//
//
//            while (countHeight + textSize <= height && startIndex < text.length()) {
//
//                double startWidth = 0;
//
//                String substring = text.substring(startIndex);
//                StringBuffer stringBuffer = new StringBuffer();
//                char[] chars = substring.toCharArray();
//
//
//                for (char aChar : chars) {
//
//                    if (startWidth + textSize <= width) {
//                        if((aChar+"").matches("[a-zA-Z0-9_,.?!:;…~_\\-\"\"/@*+'()<>{}/[/]()<>{}\\[\\]=%&$|\\/♀♂#¥£¢€\"^` ，。？！：；……～“”、“（）”、（——）‘’＠‘·’＆＊＃《》￥《〈〉》〈＄〉［］￡［］｛｝｛｝￠【】【】％〖〗〖〗／〔〕〔〕＼『』『』＾「」「」｜﹁﹂｀．]")) {
//                            startWidth += (double) textSize/2;
//                        }  else {
//                            startWidth += (double) textSize;
//                        }
//                        stringBuffer.append(aChar);
//                        startIndex ++ ;
//                    } else {
//                        break;
//                    }
//                }
//
//
//                printText(startX , startY + textSize * (countRow - 1) , width, height, stringBuffer.toString() , textSize ,  angle,  isBold , reverse, mag);
//
//                countRow ++;
//                countHeight += textSize;
//            }
//        } else {
//
//            //没有宽高时候的打印
//            printText(startX , startY  , width, height, text , textSize ,  angle,  isBold , reverse, mag);
//        }

        printText(startX , startY  , width, height, text , textSize ,  angle,  isBold , reverse, mag);
    }

    @Override
    public void printPcBarCode(double startX, double startY, String text, double width, double Height, int LineWidth, int Rotate) {
        if(Rotate == 270 || Rotate == 90) {
            double shift = getShift(width, Height);
            printBarCode(startX + shift + Height,startY - shift,text,Height,LineWidth,Rotate);
        } else {
            printBarCode(startX,startY,text,Height,LineWidth,Rotate);
        }
    }

    @Override
    public void printPcQRCode(String x, String y, String M, String U, String data) {
        printQRCode(x, y,M, U, data);
    }

    /**
     * 条码旋转后会有偏移
     * @param width
     * @param height
     * @return
     */
    private double getShift(double width, double height) {
        return (width - height) / 2;
    }
}
